#include "weight.h"

#define GapValue 8488//校准值

extern char rx_message_1[50];

unsigned long HX711_Read(void)	//增益128
{
	unsigned long count = 0;
	unsigned char i;
	int ii = 0;
	//HX711_DOUT=1;
	//Delay__hx711_us();这两句用于复位模块
	//模块没准备好时，单片机在CLK线上输出低电平
  	HAL_GPIO_WritePin(PD_SCK_GPIO_Port,PD_SCK_Pin,GPIO_PIN_RESET);
  	while(1)
	{//a5 dout,a6 sck
		if(HAL_GPIO_ReadPin(DOUT_GPIO_Port, DOUT_Pin) == 0)
		{
			delay_us(1);
			if(HAL_GPIO_ReadPin(DOUT_GPIO_Port,DOUT_Pin) == 0)
				break;
		}
		ii++;
		if(ii>=1000000)
			break;
	}
	delay_us(1);
  	for(i=0;i<24;i++)
	{
		HAL_GPIO_WritePin(PD_SCK_GPIO_Port,PD_SCK_Pin,GPIO_PIN_SET);
		delay_us(1);
	  	count=count<<1;
	  	HAL_GPIO_WritePin(PD_SCK_GPIO_Port,PD_SCK_Pin,GPIO_PIN_RESET);
	  	if(HAL_GPIO_ReadPin(DOUT_GPIO_Port,DOUT_Pin)==1)//读入数据
			count++;
	}
	HAL_GPIO_WritePin(PD_SCK_GPIO_Port,PD_SCK_Pin,GPIO_PIN_SET);
	delay_us(2);
    count=count^0x800000;//第25个脉冲下降沿来时，转换数据
	HAL_GPIO_WritePin(PD_SCK_GPIO_Port,PD_SCK_Pin,GPIO_PIN_RESET);
	return(count);
}

u16 Get_Weight(void)
{
	unsigned long Weight_Shiwu = 0;//读取到力的大小
#if 1
	Weight_Shiwu = HX711_Read();
	if(Weight_Shiwu > 0)
		Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/1000 - GapValue)* 2; 	//计算实物的实际重量
#endif
	return Weight_Shiwu;
}

















